import java.io.*;

public class FileLearning {
    public static void main(String[] args) throws IOException {
        File f1 = new File("test.txt");
        if (!f1.exists()) {
            try {
                f1.createNewFile();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        System.out.println(f1.getPath());//获取相对路径
        System.out.println(f1.getAbsolutePath());//获取绝对路径
        System.out.println(f1.getName());//获取文件名

        FileOutputStream f1Out = new FileOutputStream("test.txt"); //创建字节输出流FileOutputStream
        FileInputStream f1In = new FileInputStream("test.txt");   //创建字节输入流FileInputStream
        f1Out.write(97); //这里的97代表的是ASCII表上的字节a
        //读取字节有统一格式
        //必须添加这个变量，直接使用f1In.read作为输出，因为每次执行read()方法的时候，读取文件字节的指针都会向后移动一位。
        int temp = 0;
        while ((temp = f1In.read())!=-1){
            System.out.println((char)temp); //不强转会生成int类型的97
        }
        byte[] b1 = {97,98,99,100,101};
        f1Out.write(b1); //可以直接读取字符组
        f1Out.write(b1,1,3); //从？字符组的？位置读取？个字符
        temp = 0;
        while ((temp = f1In.read())!=-1){
            System.out.println((char)temp);
        }
        //在最后养成创建关闭文件操作的习惯
        f1Out.close();
        f1In.close();

        FileWriter f1StringWrite = new FileWriter("test.txt"); //创建字符流输出 原来字符流文件内容清空了
        f1StringWrite.write("123"); //输入数字，字符串，字符，字符组，字符串分割，字符组分割都可以
                                //“\n”转义字符是可以正常写到文件中的（正常换行）
        FileReader f1StringRead = new FileReader("test.txt");
        //字符流的输入输出与字节流的差不多，但是字符流只能操作文本文件，不能操作除了文本文件以外的文件，
        //而字节流可以操作文本文件以及音乐，视频等文件，因此在平时的IO流中，我们使用字节流的操作更多一些。
        f1StringWrite.close();
        f1StringRead.close();

        //简单实现一下复制文件
        FileInputStream f1Copy = new FileInputStream("test.txt");
        File f2 = new File("testCopy.txt");
        if (!f2.exists()){
            f2.createNewFile();
        }
        FileOutputStream f2Copy = new FileOutputStream("testCopy.txt");
        int hasRead = 0;
        while ((hasRead = f1Copy.read())!=-1) {
            f2Copy.write(hasRead);
        }
        f1Copy.close();
        f2Copy.close();
    }
}
